package adapter

import (
	"fmt"
	"time"
)

// 以日志系统为例演示适配器模式
// 目标接口 - 旧版日志系统
type LegacyLogger interface {
	Log(message string)
}

// 适配者 新版日志接口
type NewLogger interface {
	Info(msg string)
	Error(msg string)
	Debug(msg string)
}

// 新版具体日志实现
type ConsoleLogger struct {
}

func (c *ConsoleLogger) Info(msg string) {
	fmt.Printf("[%s] [INFO] [%s]\n", time.Now().Format("2006-01-02 15:04:05"), msg)
}
func (c *ConsoleLogger) Error(msg string) {
	fmt.Printf("[%s] [ERROR] [%s]\n", time.Now().Format("2006-01-02 15:04:05"), msg)
}
func (c *ConsoleLogger) Debug(msg string) {
	fmt.Printf("[%s] [DEBUG] [%s]\n", time.Now().Format("2006-01-02 15:04:05"), msg)
}

// 适配器
type LoggerAdapter struct {
	newLogger NewLogger
}

func NewLoggerAdapter(newLogger NewLogger) *LoggerAdapter {
	return &LoggerAdapter{
		newLogger: newLogger,
	}
}
func (l *LoggerAdapter) Log(message string) {
	// 旧版没有级别，所以默认为info
	l.newLogger.Info(message)
}

// 客户端代码 - 旧系统
func processOrder(logger LegacyLogger) {
	logger.Log("订单创建开始......")
	logger.Log("订单创建结束......")
}
